package operations; import polynomials.Monom; import polynomials.Polynomial; /** * Has methods that allow the coumputation of different operations on two * polynomials * * @author Cosmina * */ public class BiOperation implements Operation { private Monom m; private Polynomial p; private int[] polySorted = new int[20]; public BiOperation() { p = new Polynomial(); } public Polynomial add(Polynomial p1, Polynomial p2) { p.getArray().clear(); if (p1.getDegree() > p2.getDegree()) { for (Monom m1 : p1.getArray()) { polySorted[m1.getPower()] = m1.getCoeff(); } for (Monom m1 : p1.getArray()) { for (Monom m2 : p2.getArray()) { if (m1.getPower() == m2.getPower()) { polySorted[m1.getPower()] += m2.getCoeff(); } } } } if (p2.getDegree() > p1.getDegree()) { for (Monom m2 : p2.getArray()) { polySorted[m2.getPower()] = m2.getCoeff(); } for (Monom m2 : p2.getArray()) { for (Monom m1 : p1.getArray()) { if (m1.getPower() == m2.getPower()) { polySorted[m2.getPower()] += m1.getCoeff(); } } } } for (int i = polySorted.length - 1; i >= 0; i--) { m = new Monom(polySorted[i], i); p.addMonom(m); } return p; } public Polynomial subtract(Polynomial p1, Polynomial p2) { p.getArray().clear(); if (p1.getDegree() > p2.getDegree()) { for (Monom m1 : p1.getArray()) { polySorted[m1.getPower()] = m1.getCoeff(); } for (Monom m1 : p1.getArray()) { for (Monom m2 : p2.getArray()) { if (m1.getPower() == m2.getPower()) { polySorted[m1.getPower()] -= m2.getCoeff(); } } } } if (p2.getDegree() > p1.getDegree()) { for (Monom m2 : p2.getArray()) { polySorted[m2.getPower()] = m2.getCoeff(); } for (Monom m2 : p2.getArray()) { for (Monom m1 : p1.getArray()) { if (m1.getPower() == m2.getPower()) { polySorted[m2.getPower()] -= m1.getCoeff(); } } } } for (int i = polySorted.length - 1; i >= 0; i--) { m = new Monom(polySorted[i], i); p.addMonom(m); } return p; } public Polynomial multiply(Polynomial p1, Polynomial p2) { p.getArray().clear(); for (Monom m1 : p1.getArray()) { for (Monom m2 : p2.getArray()) { m = new Monom(m1.getCoeff() * m2.getCoeff(), m1.getPower() + m2.getPower()); polySorted[m.getPower()] += m.getCoeff(); } } for (int i = polySorted.length - 1; i >= 0; i--) { m = new Monom(polySorted[i], i); p.addMonom(m); } return p; } @Override public Polynomial differentiate(Polynomial p1) { return null; } @Override public Polynomial integrate(Polynomial p1) { return null; } @Override public int evaluatePolyAtPoint(int point, Polynomial p1) { return 0; } /* * public ArrayList<Monom> divide(Polynomial p1, Polynomial p2) { * ArrayList<Monom> resultMultiplication = new ArrayList<Monom>(); * ArrayList<Monom> resultSubstraction = new ArrayList<Monom>(); Polynomial * auxp = new Polynomial(); p.getArray().clear(); r.getArray().clear(); * * if (p1.getDegree() >= p2.getDegree()) { for (Monom m1 : p1.getArray()) { * for (Monom m2 : p2.getArray()) { if (m2.getCoeff() != 0 && m2.getPower() * != 0) { m = new Monom(m1.getCoeff() / m2.getCoeff(), m1.getPower() / * m2.getPower()); p.addMonom(m);// catul resultMultiplication = * multiply(p2, p); for (Monom mAux : resultMultiplication) { * auxp.addMonom(mAux); } resultSubstraction = substract(p1, auxp); for * (Monom mAux : resultSubstraction) { r.addMonom(mAux); } p1 = r; } } } } * return p.getArray(); } */ }